<?php

declare(strict_types=1);

namespace App\Command;

use Hyperf\Command\Command as HyperfCommand;
use Hyperf\Command\Annotation\Command;
use Psr\Container\ContainerInterface;
use Symfony\Component\Console\Input\InputArgument;

/**
 * @Command
 */
#[Command]
class SupervisorCommand extends HyperfCommand
{
    /**
     * @var ContainerInterface
     */
    protected $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;

        parent::__construct('supervisor:create-ini');
    }

    public function configure()
    {
        parent::configure();
        $this->setDescription('create supervisor xx.ini file !!');
        $this->addArgument('home', InputArgument::OPTIONAL, '项目路径', '');
    }

    public function handle()
    {
        $homePath = $this->input->getArgument('home');
        $appName = config('app_name');
        if (!$homePath) {
            $homePath = BASE_PATH;
        }
        $this->line('home: ' . $homePath, 'info');
        $logPath = config('log_path');
        if (!$logPath) {
            $logPath = $homePath;
        }
        $logPath = rtrim($logPath, '/');
        $iniFile = <<<EOF
#新建一个应用并设置一个名称，这里设置为 $appName
[program:hyperf-$appName]
# 设置命令在指定的目录内执行
directory={$homePath}/
# 这里为您要管理的项目的启动命令
command=php ./bin/hyperf.php start
# 以哪个用户来运行该进程
user=root
# supervisor 启动时自动该应用
autostart=true
# 进程退出后自动重启进程
autorestart=true
# 进程持续运行多久才认为是启动成功
startsecs=1
# 重试次数
startretries=3
# stderr 日志输出位置
stderr_logfile={$logPath}/stderr.log
# stdout 日志输出位置
stdout_logfile={$logPath}/stdout.log
EOF;
        file_put_contents(BASE_PATH . '/hyperf-' . $appName . '.ini', $iniFile);

    }
}
